﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using CondominioWeb.Persistencia.NHibernate;
using CondominioWeb.Dominio;

namespace CondominioWeb.Pruebas
{
    [TestFixture]
    public class TestViviendaDAO
    {
        private ViviendaDAO viviendaDAO = new ViviendaDAO();
       
        [Test]
        public void TestCrear()
        {
            Residente oResidente = new Residente() ;
            Residente oPropietario = new Residente();

            // 1. Instanciando el objeto TO
            Vivienda nuevoVivienda = new Vivienda();

            oResidente.CodigoResidente = 1;
            oPropietario.CodigoResidente = 1;

            nuevoVivienda.Codigo_Vivienda = 1;
            nuevoVivienda.Descripcion = "CASA URBANA TIPO A";
            nuevoVivienda.Estado = "Activo";
            nuevoVivienda.oPropietario = oPropietario;
            nuevoVivienda.oResidente = oResidente;
            // 2. Llamada al método del DAO a probar
            Vivienda ViviendaCreado = viviendaDAO.Crear(nuevoVivienda);
            // 4. Implementar las validaciones
            Assert.NotNull(ViviendaCreado);
            Assert.AreEqual(nuevoVivienda.Descripcion, ViviendaCreado.Descripcion);
            Assert.IsNotNull(ViviendaCreado.Descripcion);

        }
        [Test]
        public void TestObtener()
        {
            int _cod_Vivienda;
            // 1. Instanciando el objeto TO
            // 2. Llamada al método del DAO a probar
            _cod_Vivienda = 1;
            Vivienda ViviendaConsulta = viviendaDAO.Obtener(_cod_Vivienda);
            // 4. Implementar las validaciones
            Assert.NotNull(ViviendaConsulta);
            Assert.AreEqual(ViviendaConsulta.Codigo_Vivienda, _cod_Vivienda);
            Assert.IsNotNull(ViviendaConsulta.Descripcion);

        }

        [Test]
        public void TestModificar()
        {
            Residente oResidente = new Residente();
            Residente oPropietario = new Residente();

            // 1. Instanciando el objeto TO
            Vivienda oVivienda = new Vivienda();

            oVivienda.Codigo_Vivienda = 1;
            oVivienda.Descripcion = "Departamento Tipo B";
            oVivienda.oPropietario = oPropietario;
            oVivienda.oResidente = oResidente;
            oVivienda.Estado = "Activo";
            
            // 2. Llamada al método del DAO a probar
            Vivienda ViviendaModificado = viviendaDAO.Modificar(oVivienda);
            // 4. Implementar las validaciones
            Assert.NotNull(ViviendaModificado);
            Assert.AreEqual(oVivienda.Descripcion, ViviendaModificado.Descripcion);
            Assert.IsNotNull(ViviendaModificado.Descripcion);
        }

        [Test]
        public void TestEliminar()
        {
            // 1. Instanciando el objeto TO
            Vivienda oVivienda = new Vivienda();
            oVivienda.Codigo_Vivienda = 1;
            // 2. Llamada al método del DAO a probar
            Assert.Catch<Exception>(delegate
            {
                viviendaDAO.Eliminar(oVivienda);
            });
            Assert.DoesNotThrow(delegate
            {
                viviendaDAO.Eliminar(oVivienda);
            });

            // 3. Implementar las validaciones
            Assert.NotNull(oVivienda);
            Assert.NotNull(oVivienda.Codigo_Vivienda);
            
            
        }

        [Test]
        public void TestListarViviendaPorDescripcion()
        {
            string descripcion = "URB";
            ICollection<Vivienda> LVivienda = viviendaDAO.ListarViviendaPorDescripcion(descripcion);
            Assert.NotNull(LVivienda);
            Assert.Greater(LVivienda.Count, 0);
        }

    }
}